package com.zenithmind.note.service;

import com.zenithmind.note.pojo.dto.NoteCommentDTO;
import com.zenithmind.note.pojo.entity.NoteComment;
import com.zenithmind.note.pojo.query.NoteCommentQuery;
import com.zenithmind.note.pojo.query.UserCommentQuery;
import com.zenithmind.note.pojo.vo.NoteCommentVO;
import com.zenithmind.common.result.PageResult;
import com.zenithmind.common.result.Result;

import java.util.List;

/**
 * 笔记评论服务接口
 */
public interface NoteCommentService {
    
    /**
     * 创建评论 - 内部获取当前用户ID
     *
     * @param commentDTO 评论DTO
     * @return 评论实体
     */
    NoteComment createComment(NoteCommentDTO commentDTO);
    
    /**
     * 创建评论 - 外部传入用户ID
     *
     * @param commentDTO 评论DTO
     * @param userId     用户ID
     * @return 评论实体
     */
    NoteComment createComment(NoteCommentDTO commentDTO, String userId);
    
    /**
     * 删除评论 - 内部获取当前用户ID
     *
     * @param commentId 评论ID
     */
    void deleteComment(String commentId);
    
    /**
     * 删除评论 - 外部传入用户ID
     *
     * @param commentId 评论ID
     * @param userId    用户ID
     */
    void deleteComment(String commentId, String userId);
    
    /**
     * 获取笔记评论列表 - 内部获取当前用户ID
     *
     * @param noteId 笔记ID
     * @return 评论列表
     */
    List<NoteCommentVO> getCommentsByNoteId(String noteId);
    
    /**
     * 获取笔记评论列表 - 外部传入用户ID
     *
     * @param noteId 笔记ID
     * @param userId 用户ID
     * @return 评论列表
     */
    List<NoteCommentVO> getCommentsByNoteId(String noteId, String userId);
    
    /**
     * 点赞/取消点赞评论
     *
     * @param commentId 评论ID
     * @return 点赞结果，true表示点赞，false表示取消点赞
     */
    Result<Boolean> toggleCommentLike(String commentId);
    
    /**
     * 查询用户的评论列表 - 内部获取当前用户ID
     *
     * @param current 当前页
     * @param size    每页大小
     * @return 分页结果
     */
    PageResult<NoteCommentVO> getUserComments(long current, long size);
    
    /**
     * 查询用户的评论列表 - 外部传入用户ID
     *
     * @param userId  用户ID
     * @param current 当前页
     * @param size    每页大小
     * @return 分页结果
     */
    PageResult<NoteCommentVO> getUserComments(String userId, long current, long size);
    
    /**
     * 后台管理-分页查询评论
     *
     * @param query 评论查询对象
     * @return 分页结果
     */
    PageResult<NoteCommentVO> commentManagePage(NoteCommentQuery query);
    
    /**
     * 后台管理-获取评论详情
     *
     * @param commentId 评论ID
     * @return 评论详情
     */
    NoteCommentVO getCommentById(String commentId);
    
    /**
     * 后台管理-添加或修改评论
     *
     * @param comment 评论实体
     * @return 评论视图对象
     */
    NoteCommentVO addOrUpdateComment(NoteComment comment);
    
    /**
     * 后台管理-批量删除评论
     *
     * @param ids 评论ID列表
     */
    void deleteBatch(List<String> ids);
    
    /**
     * 后台管理-批量更新评论状态
     *
     * @param ids    评论ID列表
     * @param status 状态
     */
    void batchUpdateStatus(List<String> ids, Integer status);
    
    /**
     * 查询用户的评论列表 - 使用查询对象
     *
     * @param query 查询对象
     * @return 分页结果
     */
    PageResult<NoteCommentVO> getUserCommentPage(UserCommentQuery query);
}